跳至主要內容

疑難排解 pub

發佈套件時收到「403」錯誤

#

執行 pub publish 時收到以下錯誤訊息

HTTP error 403: Forbidden
...
You aren't an uploader for package '<foo>'

如果您的一個帳戶被授予發佈套件的權限,但 pub 用戶端使用另一個帳戶註冊您,則可能會發生此問題。

您可以刪除 pub 憑證檔案來重設 pub 的驗證程序

Linux

#

如果已定義 $XDG_CONFIG_HOME

$ rm $XDG_CONFIG_HOME/dart/pub-credentials.json

否則

$ rm $HOME/.config/dart/pub-credentials.json

macOS

#
$ rm $HOME/Library/Application Support/dart/pub-credentials.json

Windows

#

如果您使用命令提示字元

cmd
$ del "%APPDATA%\dart\pub-credentials.json"

如果您使用 PowerShell

$ Remove-Item -Path "%APPDATA%\dart\pub-credentials.json"

發佈套件時收到「UnauthorizedAccess」錯誤

#

執行 pub publish 時收到以下錯誤訊息

UnauthorizedAccess: Unauthorized user: <username> is not allowed to upload versions to package '<foo>'.

如果您不在授權發佈套件新版本的人員名單中,您將會看到此訊息。請參閱上傳者

Pub 建置失敗並出現 HttpException 錯誤

#

執行 pub build 時收到類似以下的 HttpException 錯誤

Pub build failed, [1] IsolateSpawnException: 'HttpException: Connection closed while receiving data,
...
library handler failed
...

這可能是由於某些防毒軟體(例如 AVG 2013 Internet Security Suite)所導致。請查看您的安全套件手冊,瞭解如何暫時停用此功能。例如,請參閱如何停用 AVG 元件

Pub get 在公司防火牆後方失敗

#

從命令列中,pub 會採用 http_proxyhttps_proxy 環境變數。您可以如下設定 Proxy 伺服器環境變數。

在 Linux/macOS 上

$ export https_proxy=hostname:port

在 Windows 命令提示字元中

cmd
$ set https_proxy=hostname:port

在 Windows PowerShell 中

$ $Env:https_proxy="hostname:port"

如果 Proxy 需要憑證,您可以如下設定。

在 Linux/macOS 上

$ export https_proxy=username:password@hostname:port

在 Windows 命令提示字元中

cmd
$ set https_proxy=username:password@hostname:port

在 Windows PowerShell 中

$ $Env:https_proxy="username:password@hostname:port"

登入後無法連線 Localhost

#

當您在容器中或透過 SSH 連線執行 dart pub publish 時,dart pub 正在監聽的 localhost 可能與您的瀏覽器可存取的 localhost 不同。雖然您可以使用瀏覽器登入,但瀏覽器隨後會抱怨 http://localhost:<port>?code=... 無法連線。

嘗試使用此變通方法,它使用命令列完成登入

  1. 在終端機視窗中,執行 dart pub publish

  2. 在彈出的瀏覽器視窗中,登入。
    瀏覽器會重新導向至新的 localhost URL (http://localhost:<port>?code=...),但抱怨該 URL 無法連線。

  3. 從瀏覽器複製新的 localhost URL

  4. 在與呼叫 dart pub publish 的容器或主機相同的另一個終端機視窗中,使用 curl 命令,使用新的 localhost URL 完成登入

    $ curl 'http://localhost:<port>?code=...'

嘗試尋找套件時收到 Socket 錯誤

#

如果您沒有網際網路連線、您的 ISP 封鎖了 pub.dev,或安全性軟體封鎖了來自 dart 的網際網路存取,則可能會發生以下錯誤。

Got socket error trying to find package ... at https://pub.dev.
pub get failed (server unavailable) -- attempting retry 1 in 1 second...

檢查您的網際網路連線,並確認您沒有防火牆或其他安全性軟體封鎖來自 dart 的網際網路存取。

Kaspersky Internet Security 的詳細指示

當您從選單列關閉Kaspersky Internet Security 保護時,VPN 應用程式篩選器 sysextctrld 仍在背景執行。此篩選器會導致無法連線到 pub.dev。若要解決此問題,請將 https://pub.devhttps://pub.dartlang.org 都新增到信任區域

  1. 開啟 Kaspersky Internet Security。
  2. 點擊隱私權圖示。
  3. 封鎖網站追蹤區段下,點擊偏好設定按鈕。
  4. 在頂端圖示列中,選取威脅
  5. 威脅下,點擊信任區域
  6. 選取信任的網址標籤。
  7. 點擊 + 按鈕,並新增 URL https://pub.dev
  8. 點擊確定
  9. 針對 https://pub.dartlang.org 重複前兩個步驟